<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <style>
      /* 填写样式 */
    </style>
  </head>

  <body>
    <!-- 填写标签 -->
    <script type="text/javascript">
        /**
         * 好像是牛客JS篇里第一道定时器有关的题目，太典型了，
         * 我们都知道JS定时器是异步的
         * 先抛开停止定时器不谈，怎么实现打印呢，先打印第一个后面的每100ms打印一次对吧
         * 每次打印以后start加一，如果strat大于end则停止，这里的思路就明确了
         * 现在来想想怎么实现随调随停呢，定义全局定时器吗？是不是容易造成全局污染了，
         * 我们之前怎么实现函数内的局部变量来着，闭包对吧，这里我们在count函数内定义一个定时器，
         * 在返回的对象中定义一个cancel方法，将cancel方法挂载到全局变量timer上，如此实现了timer的暂存
         * 我们在count函数外调用cancel方法即可停止定时器
         */
      // 填写JavaScript
      let count = (start, end) => {
        try {
          if (start > end) throw new Error("start必须小于等于end");
          else console.log(start++);

          let timer = setInterval(() => {
            start > end ? clearInterval(timer) : console.log(start++);
          }, 100);

          return {
            cancel: () => {
              clearInterval(timer);
            },
          };
        } catch (e) {
          console.log(e);
        }
      };

      //测例
      let timer = count(1, 5);
      setTimeout(() => {
        timer.cancel();
      }, 300);//打印1 2 3 4
    </script>
  </body>
</html>
